import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/zh-cn'

dayjs.extend(relativeTime)
dayjs.locale('zh-cn')

/**
 * 格式化时间
 * @param {string|Date} time 时间
 * @returns {string} 格式化后的时间
 */
export function formatTime(time) {
  if (!time) return ''
  
  const now = dayjs()
  const target = dayjs(time)
  const diff = now.diff(target, 'minute')
  
  if (diff < 1) {
    return '刚刚'
  } else if (diff < 60) {
    return `${diff}分钟前`
  } else if (diff < 1440) { // 24小时
    return `${Math.floor(diff / 60)}小时前`
  } else if (diff < 10080) { // 7天
    return `${Math.floor(diff / 1440)}天前`
  } else {
    return target.format('YYYY-MM-DD')
  }
}

/**
 * 格式化数字
 * @param {number} count 数字
 * @returns {string} 格式化后的数字
 */
export function formatCount(count) {
  if (!count || count === 0) return '0'
  
  if (count < 1000) {
    return count.toString()
  } else if (count < 10000) {
    return `${(count / 1000).toFixed(1)}k`
  } else if (count < 100000000) {
    return `${(count / 10000).toFixed(1)}万`
  } else {
    return `${(count / 100000000).toFixed(1)}亿`
  }
}

/**
 * 格式化文件大小
 * @param {number} size 文件大小（字节）
 * @returns {string} 格式化后的文件大小
 */
export function formatFileSize(size) {
  if (!size || size === 0) return '0 B'
  
  const units = ['B', 'KB', 'MB', 'GB', 'TB']
  let index = 0
  
  while (size >= 1024 && index < units.length - 1) {
    size /= 1024
    index++
  }
  
  return `${size.toFixed(index === 0 ? 0 : 1)} ${units[index]}`
}

/**
 * 截取文本
 * @param {string} text 文本
 * @param {number} length 长度
 * @returns {string} 截取后的文本
 */
export function truncateText(text, length = 100) {
  if (!text) return ''
  
  if (text.length <= length) {
    return text
  }
  
  return text.substring(0, length) + '...'
}

/**
 * 高亮关键词
 * @param {string} text 文本
 * @param {string} keyword 关键词
 * @returns {string} 高亮后的HTML
 */
export function highlightKeyword(text, keyword) {
  if (!text || !keyword) return text
  
  const regex = new RegExp(`(${keyword})`, 'gi')
  return text.replace(regex, '<mark>$1</mark>')
}

/**
 * 格式化价格
 * @param {number} price 价格
 * @returns {string} 格式化后的价格
 */
export function formatPrice(price) {
  if (!price || price === 0) return '免费'
  
  return `¥${price.toFixed(2)}`
}

/**
 * 格式化百分比
 * @param {number} value 数值
 * @param {number} total 总数
 * @returns {string} 百分比
 */
export function formatPercentage(value, total) {
  if (!total || total === 0) return '0%'
  
  const percentage = (value / total) * 100
  return `${percentage.toFixed(1)}%`
}
